Skip to content

[tests] implement 1.4.3 (10.3) default route advertisement test#3443

Merged
jwhui merged 1 commit into
openthread:mainfrom
jwhui:dind-1-4-pic-tc-3
Jun 25, 2026
Merged

[tests] implement 1.4.3 (10.3) default route advertisement test#3443
jwhui merged 1 commit into
openthread:mainfrom
jwhui:dind-1-4-pic-tc-3

Conversation

@jwhui

@jwhui jwhui commented Jun 23, 2026

Copy link
Copy Markdown
Member

Implement the Thread 1.4 test case "10.3. [1.4] [CERT] IPv6 default route advertisement" in the docker-in-docker integration framework.

Changes:

  • Create tests/scripts/expect/dind_1_4_pic_tc_3.exp to execute the 14-step test procedure verifying default route advertisement, withdrawal, and recovery.
  • Configure accept_ra=2 on the DUT container's eth0 interface and delete Docker's static default route using nsenter. This allows the DUT to behave realistically by dynamically configuring default routes and global IPs on the infrastructure link solely via RAs.
  • Modify radvd prefix on the CPE container to a global unicast address (GUA) prefix 2001:db8:1::/64 to ensure an active non-ULA prefix is present as required by the test plan.
  • Reconfigure radvd process controls to use 'kill' and 'pgrep' instead of 'killall' since the container image lacks 'killall'.
  • Register dind_1_4_pic_tc_3.exp in tests/scripts/test_dind_dns_sd.sh.

gemini-code-assist[bot]

This comment was marked as outdated.

@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 9b13ef4 to 92c8d5c Compare June 23, 2026 20:18
gemini-code-assist[bot]

This comment was marked as outdated.

@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 92c8d5c to af0ffb6 Compare June 23, 2026 20:23
@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 34.94%. Comparing base (2b41187) to head (de65b82).
⚠️ Report is 1546 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##             main    #3443       +/-   ##
===========================================
- Coverage   55.77%   34.94%   -20.84%     
===========================================
  Files          87      143       +56     
  Lines        6890    17247    +10357     
  Branches        0     1413     +1413     
===========================================
+ Hits         3843     6027     +2184     
- Misses       3047    10889     +7842     
- Partials        0      331      +331     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 4f9a1a6 to b85ec63 Compare June 23, 2026 21:02
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from b85ec63 to 9f9dd17 Compare June 23, 2026 21:27
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 9f9dd17 to 8037448 Compare June 23, 2026 21:37
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 8037448 to fbd643e Compare June 23, 2026 21:41
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from fbd643e to 608849f Compare June 23, 2026 21:46
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 608849f to 840bb3f Compare June 23, 2026 21:58
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 840bb3f to db0ffe9 Compare June 23, 2026 22:01
jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from db0ffe9 to 2f8cd03 Compare June 23, 2026 22:05
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 2f8cd03 to ac1afaf Compare June 23, 2026 22:09
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from ac1afaf to abe80c9 Compare June 23, 2026 22:13
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 23, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from abe80c9 to 3394d92 Compare June 23, 2026 22:18
gemini-code-assist[bot]

This comment was marked as outdated.

gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 24, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 3394d92 to ecb7096 Compare June 24, 2026 00:23
gemini-code-assist[bot]

This comment was marked as outdated.

jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 24, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from ecb7096 to 5bd943c Compare June 24, 2026 00:39
jwhui added a commit to jwhui/ot-br-posix that referenced this pull request Jun 24, 2026
This commit addresses unresolved review comments on PR openthread#3443:
- Add 'iproute2' to border-router Dockerfile and use 'docker exec'
  instead of 'nsenter' to delete the default route inside the OTBR
  container. This removes the requirement for root privileges on the
  host VM/runner to run the tests.
- Add 'procps' package to the test client image in test_dind_dns_sd.sh
  to ensure 'pgrep' and 'pkill' commands are available for radvd.
- Include radvd and tcpdump logs from eth2-server in test_teardown.
- Print radvd.log from eth2-server if Step 10 ping unexpectedly
  succeeded to ease debugging of routing issues.

Note: The suggestion to use SIGHUP (pkill -HUP radvd) was evaluated but
rejected because radvd does not immediately send a Router Lifetime 0 RA
upon reload, causing the default route to remain active on the DUT and
failing the verification in Step 10. The original kill/restart approach
is maintained as it guarantees immediate route withdrawal.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 5bd943c to c522617 Compare June 24, 2026 00:40
@jwhui

jwhui commented Jun 24, 2026

Copy link
Copy Markdown
Member Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces two new integration tests (dind_1_4_pic_tc_1.exp and dind_1_4_pic_tc_3.exp) to verify IPv6 connectivity using DHCPv6-PD delegated OMR prefix and IPv6 default route advertisement. To support these tests, the Dockerfile for the border router has been updated to include iproute2, and the test client image setup script has been expanded to install additional network utilities such as dnsmasq, python3-scapy, radvd, tcpdump, and procps. The test runner and teardown scripts have also been updated to execute these new tests and collect relevant logs. There are no review comments to address, and no further feedback is provided.

@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from c522617 to 3732134 Compare June 24, 2026 00:57
@jwhui jwhui marked this pull request as ready for review June 24, 2026 01:51
@jwhui jwhui requested a review from abtink June 24, 2026 01:51
Implement the Thread 1.4 test case "10.3. [1.4] [CERT] IPv6 default
route advertisement" in the docker-in-docker integration framework.

Changes:
* Create tests/scripts/expect/dind_1_4_pic_tc_3.exp to execute the
  14-step test procedure verifying default route advertisement,
  withdrawal, and recovery.
* Configure accept_ra=2 on the DUT container's eth0 interface and
  delete Docker's static default route using nsenter. This allows the
  DUT to behave realistically by dynamically configuring default
  routes and global IPs on the infrastructure link solely via RAs.
* Modify radvd prefix on the CPE container to a global unicast
  address (GUA) prefix 2001:db8:1::/64 to ensure an active non-ULA
  prefix is present as required by the test plan.
* Reconfigure radvd process controls to use 'kill' and 'pgrep'
  instead of 'killall' since the container image lacks 'killall'.
* Register dind_1_4_pic_tc_3.exp in tests/scripts/test_dind_dns_sd.sh.
@jwhui jwhui force-pushed the dind-1-4-pic-tc-3 branch from 3732134 to de65b82 Compare June 25, 2026 05:44
@jwhui jwhui merged commit ec16e39 into openthread:main Jun 25, 2026
41 of 43 checks passed
@jwhui jwhui deleted the dind-1-4-pic-tc-3 branch June 25, 2026 16:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants